#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Models.Marketmodels.Curvestates;
using Cephei.QL.Math;
namespace Cephei.QL.Models.Marketmodels.Driftcomputation
{
     // <summary> 
	// ! Returns the drift \f$ \mu \Delta t \f$. See Mark Joshi, <i>Rapid Computation of Drifts in a Reduced Factor Libor Market Model</i>, Wilmott Magazine, May 2003.
	// </summary>
    [Guid ("4F2145FE-28CA-42f9-88C9-8056BB8491D3"),ComVisible(true)]
	public interface ILMMNormalDriftCalculator 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 ILMMNormalDriftCalculator Compute(Cephei.IVector<Double> fwds, Cephei.IVector<Double> drifts);
        
		 ILMMNormalDriftCalculator Compute(Cephei.QL.Models.Marketmodels.Curvestates.ILMMCurveState cs, Cephei.IVector<Double> drifts);
        
		 ILMMNormalDriftCalculator ComputePlain(Cephei.IVector<Double> fwds, Cephei.IVector<Double> drifts);
        
		 ILMMNormalDriftCalculator ComputePlain(Cephei.QL.Models.Marketmodels.Curvestates.ILMMCurveState cs, Cephei.IVector<Double> drifts);
        
		 ILMMNormalDriftCalculator ComputeReduced(Cephei.IVector<Double> fwds, Cephei.IVector<Double> drifts);
        
		 ILMMNormalDriftCalculator ComputeReduced(Cephei.QL.Models.Marketmodels.Curvestates.ILMMCurveState cs, Cephei.IVector<Double> drifts);
    }

    // <summary> 
	// ! Returns the drift \f$ \mu \Delta t \f$. See Mark Joshi, <i>Rapid Computation of Drifts in a Reduced Factor Libor Market Model</i>, Wilmott Magazine, May 2003. Factory
	// </summary>
   	[ComVisible(true)]
    public interface ILMMNormalDriftCalculator_Factory // : Collection_Factory<ILMMNormalDriftCalculator, ICell<ILMMNormalDriftCalculator>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    ILMMNormalDriftCalculator Create (Cephei.QL.Math.IMatrix pseudo, Cephei.IVector<Double> taus, UInt64 numeraire, UInt64 alive);
    }
}

